package useless.wecker;

import java.io.IOException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Timer extends Thread{

    Weckzeit weckzeit;
    boolean lichtAn = false;
    boolean kaffeeAn = false;
    boolean updated = false;
    int lastUpdateMinute = 0;
    public boolean stop = false;
    
    @Override
    public void run() {
        while(!stop){
            
            updateWecker();
            
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
        
        
    }

    
    
    public void updateWecker() {
        try{
        Calendar cal = Calendar.getInstance();
        int minute = cal.get(cal.MINUTE);
        if (minute != lastUpdateMinute) {
            Weckzeit newWeck = Database.getNewWeckzeit();
            if (newWeck.minute != weckzeit.minute || newWeck.stunde != weckzeit.stunde) {
                weckzeit.stop = true;
                weckzeit = newWeck;
                weckzeit.start();
                updated = true;
                System.out.println("upateded time " + weckzeit.toString());
            }
        }
        lastUpdateMinute = minute;
        }catch(IOException e){
            System.out.println("Aktualisierung fehlgeschlagen, IOError " + e.getMessage());
        }catch(NumberFormatException e){
            System.out.println("Aktualisierung fehlgeschlagen, ungültiger Wert " + e.getMessage());
        }
    }

    public void forceUpdateWecker(){
        try {
            Calendar cal = Calendar.getInstance();
            int minute = cal.get(cal.MINUTE);
            Weckzeit newWeck = Database.getNewWeckzeit();
            if (newWeck.minute != weckzeit.minute || newWeck.stunde != weckzeit.stunde) {
                weckzeit.stop = true;
                weckzeit = newWeck;
                weckzeit.start();
                updated = true;
                System.out.println("upateded time " + weckzeit.toString());
            }
            lastUpdateMinute = minute;
        }catch(IOException e){
            System.out.println("Aktualisierung fehlgeschlagen, IOError " + e.getMessage());
        }catch(NumberFormatException e){
            System.out.println("Aktualisierung fehlgeschlagen, ungültiger Wert " + e.getMessage());
        }
    }

    public Timer(int hour, int minute) {
        weckzeit = new Weckzeit(hour, minute);
        weckzeit.start();
        forceUpdateWecker();
        System.out.println("Wecker gestellt auf: " + hour + ":" + minute + ":00 Uhr.");
        System.out.println("aktuelle Zeit: " + Database.getCurrentTimeString());
    }
}
